
package webui;

import limfic.dominio.Equipo;
import limfic.servicios.equipo.EquipoServicio;
import limfic.servicios.ServicioException;
import limfic.ui.IUsuarioInterfazEquipo;
import com.sun.rave.web.ui.appbase.AbstractPageBean;
import com.sun.rave.web.ui.component.Alert;
import com.sun.rave.web.ui.component.Body;
import com.sun.rave.web.ui.component.Label;
import com.sun.rave.web.ui.component.TabSet;
import com.sun.rave.web.ui.component.TextField;
import java.util.List;
import javax.faces.FacesException;
import javax.faces.component.html.HtmlDataTable;

/**

 * @version AdministracionEquipos.java
 * @version Created on 17-may-2011, 23:38:30
 * @author OpenCodes
 */

public class AdministracionEquipos extends AbstractPageBean implements IUsuarioInterfazEquipo {
    // <editor-fold defaultstate="collapsed" desc="Managed Component Definition">

    /**
     * <p>Automatically managed component initialization.  <strong>WARNING:</strong>
     * This method is automatically generated, so any user-specified code inserted
     * here is subject to being replaced.</p>
     */
    private EquipoServicio abmEquipoServicio;
    private List<Equipo> listaEquipos;
    private String mensajeError;
    
    public List<Equipo> getListaEquipos() {
        return listaEquipos;
    }
    private void _init() throws Exception {
    }
    private Alert alerta = new Alert();

    public Alert getAlerta() {
        return alerta;
    }

    public void setAlerta(Alert a) {
        this.alerta = a;
    }
    private TabSet tabSetEquipos = new TabSet();

    public TabSet getTabSetEquipos() {
        return tabSetEquipos;
    }

    public void setTabSetEquipos(TabSet ts) {
        this.tabSetEquipos = ts;
    }
    private TextField tfNombre = new TextField();

    public TextField getTfNombre() {
        return tfNombre;
    }

    public void setTfNombre(TextField tf) {
        this.tfNombre = tf;
    }
    private TextField tfBuscarNombre = new TextField();

    public TextField getTfBuscarNombre() {
        return tfBuscarNombre;
    }

    public void setTfBuscarNombre(TextField tf) {
        this.tfBuscarNombre = tf;
    }
    private Label lblIdEquipo = new Label();

    public Label getLblIdEquipo() {
        return lblIdEquipo;
    }

    public void setLblIdEquipo(Label l) {
        this.lblIdEquipo = l;
    }
    private HtmlDataTable tablaEquipos = new HtmlDataTable();

    public HtmlDataTable getTablaEquipos() {
        return tablaEquipos;
    }

    public void setTablaEquipos(HtmlDataTable hdt) {
        this.tablaEquipos = hdt;
    }
    private Body body = new Body();

    public Body getBody() {
        return body;
    }

    public void setBody(Body b) {
        this.body = b;
    }

    // </editor-fold>

    /**
     * <p>Construct a new Page bean instance.</p>
     */
    public AdministracionEquipos() {

    }

   
    @Override
    public void init() {
        // Perform initializations inherited from our superclass
        super.init();
        obtenerEquipos();
        // Perform application initialization that must complete
        // *before* managed components are initialized
        
        
        // <editor-fold defaultstate="collapsed" desc="Managed Component Initialization">
        // Initialize automatically managed components
        // *Note* - this logic should NOT be modified
        try {
            _init();
        } catch (Exception e) {
            log("Fallo inicializacion de Administracion Equipos", e);
            throw e instanceof FacesException ? (FacesException) e: new FacesException(e);
        }
        
        // </editor-fold>
        // Perform application initialization that must complete
        // *after* managed components are initialized
 
    }

   
    @Override
    public void preprocess() {
    }

   
    @Override
    public void prerender() {
    }

  
    @Override
    public void destroy() {
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected RequestBean1 getRequestBean1() {
        return (RequestBean1) getBean("RequestBean1");
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected SessionBean1 getSessionBean1() {
        return (SessionBean1) getBean("SessionBean1");
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected ApplicationBean1 getApplicationBean1() {
        return (ApplicationBean1) getBean("ApplicationBean1");
    }

    @Override
    public int getId() {
        
        try {
            Object id;
            id = lblIdEquipo.getText();
            //pregunto si valor del label Id.

            if (id == null) //si esta vacio entonces devuelvo 0 para agregar.
            {
                return 0;
            } else { //si no convierto el valor del label en entero.
                return Integer.valueOf(lblIdEquipo.getText().toString());
            }
        } catch (java.lang.NullPointerException nullExc) {
            return 0;
        }
        
    }

    @Override
    public String getNombre() {
        Object nombre = null;
        nombre = tfNombre.getText();

        if (nombre == null) {
            return "";
        }
        return nombre.toString().toUpperCase(); // convierte a mayusculas
    }

    @Override
    public void setListaEquipos(List<Equipo> lista) {
        this.listaEquipos = lista;
    }

    public String tabConsultar_action() {
        if (alerta.getType().equals("warning")) {
            alerta.setSummary("");
        }

        //Si la lista jugador ya fue ordenada en el tab de consulta, ordeno la lista devuelta
        //para no perder el registro seleccionado.
        if (getSessionBean1().sesTablaOrdenada) {
            /*  Leo el campoOrden de la sesion y ordeno.
             *  El tipo de ordenamiento (Ascendete o descendente) ya esta
             *  cargado en la sesion.*/
            //ordenarListaJugadores(getSessionBean1().sesCampoOrden, getSessionBean1().sesOrdenAscendente);
        }
        body.setFocus("form:tabSetEquipos:tabConsultar:tfBuscarNombre");
        return null;
    }

    public String editarfilaTabla() {
       
        try {
            Equipo e;
            e = (Equipo) tablaEquipos.getRowData();
            String id;
            id = String.valueOf(e.getId());
            lblIdEquipo.setText(id);
            tfNombre.setText(e.getNombre());
            tabSetEquipos.setSelected("tabOperaciones");
            return null;
        } catch (java.lang.ClassCastException e) {
            alerta.setType("warning");
            alerta.setVisible(true);
            alerta.setSummary("Error al seleccionar los datos (problemas de conversion)");
            return null;
        }

        
    }

    public String ordenarListaPorNombre() {
        return null;
    }

    public String btnBuscar_action() {
        buscarEquipo();
        return null;
    }

    public String tabOperaciones_action() {
        alerta.setVisible(false);
        alerta.setSummary("");
        body.setFocus("form:tabSetEquipos:tabOperaciones:tfNombre");
        return null;
    }

    public String btnModificar_action() {
        modificarEquipo();
        return null;
    }

    public String btnEliminar_action() {
        eliminarEquipo();
        return null;
    }

    public String btnAgregar_action() {     
        agregarEquipo();
        return null;
    }

    public void pageFirst() {
        tablaEquipos.setFirst(0);
    }

    public void pagePrevious() {
        tablaEquipos.setFirst(tablaEquipos.getFirst() - tablaEquipos.getRows());
    }

    public void pageNext() {
        tablaEquipos.setFirst(tablaEquipos.getFirst() + tablaEquipos.getRows());
    }

    public void pageLast() {
        int count = tablaEquipos.getRowCount();
        int rows = tablaEquipos.getRows();
        tablaEquipos.setFirst(count - ((count % rows != 0) ? count % rows : rows));
    }

    public int getCurrentPage() {
        int rows = tablaEquipos.getRows();
        int first = tablaEquipos.getFirst();
        int count = tablaEquipos.getRowCount();
        return (count / rows) - ((count - first) / rows) + 1;
    }

    public int getTotalPages() {
        int rows = tablaEquipos.getRows();
        int count = tablaEquipos.getRowCount();
        return (count / rows) + ((count % rows != 0) ? 1 : 0);
    }
    public boolean isListaVacia() {
        return this.listaEquipos.isEmpty();

        
    }
    private void buscarEquipo() {
        try {
            //Si es valido tfBuscarNombre
            if (validarBuscar()) {
                String nombre = tfBuscarNombre.getText().toString();

                abmEquipoServicio = new EquipoServicio();
                abmEquipoServicio.init(this);
                abmEquipoServicio.listarAlgunos(this, nombre);
                
                if (this.listaEquipos.size()==0){
                    tablaEquipos.setRendered(false);
                    
                }else{
                    tablaEquipos.setRendered(true);
                }
                
                //Pregunta por ordenamiento
                if (getSessionBean1().sesTablaOrdenada) {
                    /*  Leo el campoOrden de la sesion y ordeno.
                     *  El tipo de ordenamiento (Ascendete o descendente) ya esta
                     *  cargado en la sesion.*/
                    //ordenarListaJugadores(getSessionBean1().sesCampoOrden, getSessionBean1().sesOrdenAscendente);
                }

            } else {
                alerta.setType("warning");
                alerta.setVisible(true);
                alerta.setSummary("Error:" + mensajeError);
            }
        } catch (ServicioException e) {
            mensajeError = e.toString();
            alerta.setVisible(true);
            alerta.setSummary("Error: " + e.getMessage());

        } catch (javax.faces.FacesException e) {
            alerta.setVisible(true);
            alerta.setSummary("Error: " + e.getMessage());

        } catch (Exception e) {
            alerta.setType("warning");
            alerta.setVisible(true);
            alerta.setSummary("Error: " + e.getMessage());
        }
    }

    

    private void limpiarDatos() {
        lblIdEquipo.setText(null);
        tfNombre.setText(null);
        alerta.setSummary("");
        alerta.setVisible(false);
    }
    private void obtenerEquipos() {
        
        try {
            abmEquipoServicio = new EquipoServicio();
            abmEquipoServicio.init(this);
            abmEquipoServicio.listarTodos(this);
        } catch (ServicioException e) {
            alerta.setVisible(true);
            alerta.setSummary("Error: " + e.getMessage());
        }
    }
    private void agregarEquipo() {
       
        if (isPostBack()) {
            try {
                
                boolean esValido;
                esValido = validarAgregar();
                if (esValido == false) {
                    alerta.setType("warning");
                    alerta.setVisible(true);
                    alerta.setSummary("Error:" + mensajeError);
                    return;
                }              
                abmEquipoServicio = new EquipoServicio();
                abmEquipoServicio.init(this);
                abmEquipoServicio.agregar(this);
                limpiarDatos();
                obtenerEquipos();
                alerta.setType("success");
                alerta.setVisible(true);
                alerta.setSummary("Equipo guardado con exito");
                tabSetEquipos.setSelected("tabConsultar");
                
            } catch (ServicioException e1) {
                mensajeError = "Error al agregar un equipo: ";
                mensajeError = mensajeError.concat(e1.getMessage());
                alerta.setType("warning");
                alerta.setVisible(true);
                alerta.setSummary(mensajeError);
                
            } catch (javax.faces.FacesException e2) {
                mensajeError = "Error al agregar un equipo: ";
                mensajeError = mensajeError.concat(e2.getCause().toString());
                alerta.setType("warning");
                alerta.setVisible(true);
                alerta.setSummary(mensajeError);
                
            } catch (java.lang.Exception e3) {
                mensajeError = "Error al agregar un equipo: ";
                mensajeError = mensajeError.concat(e3.getCause().toString());
                alerta.setType("warning");
                alerta.setSummary(mensajeError);
                
            }
        
        }
    }
    private void eliminarEquipo() {
        if (isPostBack()) {
            try {
                boolean esValido;
                esValido = validarEliminar();
                if (esValido == false) {
                    alerta.setVisible(true);
                    alerta.setSummary("Error: " + mensajeError);
                    return;
                }
                abmEquipoServicio = new EquipoServicio();
                abmEquipoServicio.init(this);
                abmEquipoServicio.eliminar(this);
                limpiarDatos();
                obtenerEquipos();
                alerta.setType("success");
                alerta.setVisible(true);
                alerta.setSummary("Equipo eliminado con exito");
                tabSetEquipos.setSelected("tabConsultar");

            } catch (ServicioException e1) {
                alerta.setType("warning");
                alerta.setVisible(true);
                alerta.setSummary("Error: " + e1.getMessage());

            } catch (javax.faces.FacesException e2) {
                alerta.setType("warning");
                alerta.setVisible(true);
                alerta.setSummary("Error: " + e2.getMessage());
            } catch (Exception ex4) {
                alerta.setType("warning");
                alerta.setVisible(true);
                alerta.setSummary("Error: " + ex4.getMessage());
            }
        }

    }
    private void modificarEquipo(){
        
        if (isPostBack()) {
            try {
                
                boolean esValido;
                esValido = validarModificar();
                if (esValido == false) {
                    alerta.setVisible(true);
                    alerta.setSummary("Error: " + mensajeError);
                    return;
                }
                
                abmEquipoServicio = new EquipoServicio();
                abmEquipoServicio.init(this);
                abmEquipoServicio.modificar(this);
                limpiarDatos();
                obtenerEquipos();
                alerta.setType("success");
                alerta.setVisible(true);
                alerta.setSummary("Equipo modificado con exito");
                tabSetEquipos.setSelected("tabConsultar");
            } //Servicio Exception lanzado por el servicio
            catch (ServicioException e1) {
                alerta.setType("warning");
                alerta.setVisible(true);
                alerta.setSummary("Error: " + e1.getMessage());
            } catch (javax.faces.FacesException e2) {
                alerta.setType("warning");
                alerta.setVisible(true);
                alerta.setSummary("Error: " + e2.getMessage());
            } catch (Exception ex4) {
                alerta.setType("warning");
                alerta.setVisible(true);
                alerta.setSummary("Error: " + ex4.getMessage());
            }
        }     
    }

    private boolean validarAgregar() {
        try {
            if (getNombre().isEmpty()) {
                body.setFocus("form:tabSetEquipos:tabOperaciones:tfNombre");
                mensajeError = "Debe ingresar un nombre";
                return false;
            }
            return true;

        } catch (Exception e) {
            mensajeError = "Validacion incorrecta: " + e.getCause();
            return false;
        }
    }

    private boolean validarBuscar() {
        try {
            Object buscarNombre;
            buscarNombre = tfBuscarNombre.getText();
            if (buscarNombre == null) {
                mensajeError = "Debe ingresar un nombre";
                body.setFocus("form:tabSetEquipos:tabConsultar:tfBuscarNombre");
                return false;
            }

            return true;
        } catch (Exception e) {
            mensajeError = "Validacion incorrecta: " + e.getCause();
            return false;
        }

    }

    private boolean validarEliminar() {
        try {
            if (getId() <= 0) {
                //Esto es en el caso de que no se hayan cargado los datos del equipo
                // faltaria eliminar equipo pasando como parametro el nombre
                if (getNombre().isEmpty()) {
                    body.setFocus("form:tabSetEquipos:tabOperaciones:tfNombre");
                    mensajeError = "Debe ingresar un nombre";
                    return false;
                }
               
            }

            return true;
        } catch (Exception e) {
            mensajeError = "Validacion incorrecta: " + e.getCause();
            return false;
        }
    }
    private boolean validarModificar() {
        try {
            if (getId() <= 0) {
                mensajeError = "No se puede identificar el equipo a modificar";
                return false;
            }
            if (getNombre().isEmpty()) {
                body.setFocus("form:tabSetEquipos:tabOperaciones:tfNombre");
                mensajeError = "Debe ingresar un nombre";
                return false;
            }
            return true;
        } catch (Exception e) {
            mensajeError = "Validacion incorrecta: " + e.getCause();
            return false;
        }
    }

    public String ordenarListaPorApellido() {
        // TODO: Process the button click action. Return value is a navigation
        // case name where null will return to the same page.
        return null;
    }

    public String ordenarListaPorTelefono() {
        // TODO: Process the button click action. Return value is a navigation
        // case name where null will return to the same page.
        return null;
    }

    public String ordenarListaPorCiudad() {
        // TODO: Process the button click action. Return value is a navigation
        // case name where null will return to the same page.
        return null;
    }
}

